package com.example.myDesignPatterns.结构型模式.代理模式Proxy.CGLib动态代理;

import com.example.myDesignPatterns.结构型模式.代理模式Proxy.common.TrainStation;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
import java.lang.reflect.Method;

public class ProxyFactory implements MethodInterceptor{
private final TrainStation target = new TrainStation();

    public TrainStation getProxyObject() {
        //创建Enhancer对象，类似于JDK动态代理的Proxy类，下一步就是设置几个参数
        Enhancer enhancer = new Enhancer();
        //设置父类的字节码对象
        enhancer.setSuperclass(TrainStation.class);
        //设置回调函数
        enhancer.setCallback(new ProxyFactory());
        //创建代理对象
        return (TrainStation) enhancer.create();
    }


    /**
     *intercept方法参数说明：
     * o ： 代理对象
     * method ： 真实对象中的方法的Method实例
     * args ： 实际参数
     * methodProxy ：代理对象中的方法的method实例
*/
    @Override
    public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
            System.out.println("代理点收取一些服务费用(CGLIB动态代理方式)");
            return methodProxy.invoke(target, objects);
    }

}
